From: cl349@firebug.cl.cam.ac.uk Date: Tue, 13 Sep 2005 10:13:52 +0000 (+0000) Subject: Fixed consoled race condition. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16812^2~7 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=1a93386154bd2d33f139dc31570053550c7a53a6;p=xen.git Fixed consoled race condition. Signed-off by: Andy Peace Signed-off-by: Christian Limpach --- diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 08aeda1c46..2fead094b0 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -87,6 +87,7 @@ static void buffer_append(struct domain *dom) struct buffer *buffer = &dom->buffer; struct ring_head *ring = (struct ring_head *)dom->page; size_t size; + u32 oldcons; while ((size = ring->prod - ring->cons) != 0) { if ((buffer->capacity - buffer->size) < size) { @@ -98,7 +99,8 @@ static void buffer_append(struct domain *dom) } } - while (ring->cons < ring->prod) { + oldcons = ring->cons; + while (ring->cons < (oldcons + size)) { buffer->data[buffer->size] = ring->buf[XENCONS_IDX(ring->cons)]; buffer->size++;